/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.thienloc.omap.controller.report;

import com.thienloc.omap.controller.AbstractCrudBean;
import com.thienloc.omap.entity.ServiceGroup;
import com.thienloc.omap.entity.TinhThanh;
import com.thienloc.omap.session.ServiceGroupFacade;
import com.thienloc.omap.session.SyntaxDefinitionFacade;
import com.thienloc.omap.session.TinhThanhFacade;
import com.thienloc.omap.util.JsfUtil;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author GiangLT
 */
@ManagedBean
@ViewScoped
public class ServiceGroupBean extends AbstractCrudBean implements Serializable{

    @EJB
    private ServiceGroupFacade facade;
    @EJB
    private SyntaxDefinitionFacade syntaxDefinitionFacade;
    @EJB
    private TinhThanhFacade tinhThanhFacade;
    private ServiceGroup selected;
    private List<ServiceGroup> list;
    protected ServiceGroup[] selectedList;

    @Override
    protected Logger getLogger() {
        return LoggerFactory.getLogger(SmsKeywordServiceMappingBean.class);
    }

    @Override
    protected void validateForm() throws Exception {
    }

    @Override
    protected void resetToCreateFormAction() throws Exception {
        list = facade.findAll();
        selected = new ServiceGroup();
        edit = false;
        view = false;
    }

    @Override
    protected void findSelected(int id) throws Exception {
        selected = facade.find(id);
    }

    @Override
    protected void createSelected() throws Exception {
        facade.create(selected);
        resetToCreateForm();
        JsfUtil.addSuccessMessage("Thành công!", "Đã thêm mới thành công một bản ghi");
    }

    @Override
    protected void editSelected() throws Exception {
        facade.edit(selected);
        resetToCreateForm();
        JsfUtil.addSuccessMessage("Thành công!", "Đã cập nhật thành công một bản ghi");
    }

    @Override
    protected void removeSelected() throws Exception {
        int size = selectedList.length;
        if (size == 0) {
            JsfUtil.addMessage(FacesMessage.SEVERITY_WARN, "Không có gì để xóa", "Hãy click chọn các bản ghi cần xóa");
            return;
        }

        StringBuilder eventLog = new StringBuilder("Xóa " + size + " số trong blacklist: ");
        for (ServiceGroup item : selectedList) {
            facade.remove(item);
            eventLog.append(item.getId());
            eventLog.append(", ");
        }
        eventLog.delete(eventLog.lastIndexOf(", "), eventLog.length());
        resetToCreateForm();
        JsfUtil.addSuccessMessage("Thành công!", "Đã xóa thành công " + size + " bản ghi");
    }

    @Override
    protected void prepareViewAction() throws Exception {
        view = true;
        edit = false;
        if (selectedList == null || selectedList.length == 0) {
            JsfUtil.addErrorMessage("Lỗi", "Bạn chưa tích chọn bản ghi cần hiển thị");
            return;
        }
        selected = selectedList[0];
        if (selectedList.length > 1) {
            JsfUtil.addMessage(FacesMessage.SEVERITY_WARN, "Cảnh báo hiển thị", "Bạn đã chọn nhiều hơn 1 bản ghi. Chỉ bản ghi trên cùng được hiển thị");
        }
    }

    @Override
    protected void prepareEditAction() throws Exception {
        view = false;
        edit = true;
        if (selectedList == null || selectedList.length == 0) {
            JsfUtil.addErrorMessage("Lỗi", "Bạn chưa tích chọn bản ghi cần hiển thị");
            return;
        }
        selected = selectedList[0];
        if (selectedList.length > 1) {
            JsfUtil.addMessage(FacesMessage.SEVERITY_WARN, "Cảnh báo hiển thị", "Bạn đã chọn nhiều hơn 1 bản ghi. Chỉ bản ghi trên cùng được hiển thị");
        }
    }
 
    public void fillData(){
        try {
            List<String> syntaxes = syntaxDefinitionFacade.findAllSyntax();
            List<TinhThanh> tinhThanhs = tinhThanhFacade.findAll();
            for (String syntax : syntaxes) {
                for (TinhThanh tinhThanh : tinhThanhs) {
                    String serviceGroupName = "";
                    if (tinhThanh.getVungMien().equals("Miền Bắc")){
                        serviceGroupName = syntax + " " + "MB";
                    } else if (tinhThanh.getVungMien().equals("Miền Trung")){
                        serviceGroupName = syntax + " " + "MT";
                    } else if (tinhThanh.getVungMien().equals("Miền Nam")){
                        serviceGroupName = syntax + " " + "MN";
                    }
                    
                    ServiceGroup serviceGroup = new ServiceGroup();
                    serviceGroup.setRequestDetail(syntax + " " + tinhThanh.getMaTinh());
                    serviceGroup.setServiceGroupName(serviceGroupName);
                    
                    facade.create(serviceGroup);
                }
            }
        } catch (Exception ex) {
            logger.error("",ex);
            JsfUtil.addErrorMessage("Lỗi", ex.getMessage());
        }
    }
}
